ক্লোজার (Clojure) বিভিন্ন ধরণের ডেটা কাঠামো সরবরাহ করে, যা প্রোগ্রামিং অভিজ্ঞতাকে আরও সহজ এবং কার্যকর করে তোলে। এর মধ্যে List
, Vector
, Set
, এবং Map
প্রধান ডেটা কাঠামো। এদের প্রতিটির ব্যবহার এবং বৈশিষ্ট্য নিচে বিস্তারিতভাবে আলোচনা করা হলো।
List
একটি সংযুক্ত ডেটা কাঠামো, যেখানে ডেটা একটি নির্দিষ্ট ক্রমে সংরক্ষিত থাকে এবং সাধারণত ইমিউটেবল হয়। ক্লোজারে লিস্ট তৈরি করতে '(item1 item2 ...)
বা (list item1 item2 ...)
ব্যবহার করা হয়। এটি সাধারণত ফাংশন এপ্লিকেশন ও রিকার্সিভ অপারেশনগুলোর জন্য উপযোগী।
(def my-list '(1 2 3 4 5))
; অথবা
(def my-list (list 1 2 3 4 5))
; লিস্টের প্রথম আইটেম পেতে
(first my-list) ; আউটপুট: 1
; লিস্টের বাকি অংশ পেতে
(rest my-list) ; আউটপুট: (2 3 4 5)
; লিস্টে নতুন আইটেম যোগ করতে
(cons 0 my-list) ; আউটপুট: (0 1 2 3 4 5)
লিস্ট সাধারণত নতুন আইটেম যুক্ত করার জন্য উপযোগী, তবে এটি শেষ থেকে অ্যাক্সেস করার জন্য অপেক্ষাকৃত ধীর।
Vector
একটি ইমিউটেবল, ইন্ডেক্সড ডেটা কাঠামো যা দ্রুত অ্যাক্সেস এবং সংশোধনের জন্য উপযুক্ত। ভেক্টর লিস্টের মতো অর্ডারড ডেটা স্ট্রাকচার হলেও, এটি ইন্ডেক্সের মাধ্যমে দ্রুত ডেটা অ্যাক্সেসের সুবিধা দেয়। ভেক্টর তৈরি করতে [item1 item2 ...]
বা (vector item1 item2 ...)
ব্যবহার করা হয়।
(def my-vector [1 2 3 4 5])
; অথবা
(def my-vector (vector 1 2 3 4 5))
; ভেক্টরের দ্বিতীয় আইটেম পেতে
(nth my-vector 1) ; আউটপুট: 2
; ভেক্টরের শেষে একটি আইটেম যোগ করতে
(conj my-vector 6) ; আউটপুট: [1 2 3 4 5 6]
; ভেক্টরের দৈর্ঘ্য পেতে
(count my-vector) ; আউটপুট: 5
ভেক্টর সাধারণত দ্রুত অ্যাক্সেসের জন্য ব্যবহৃত হয় এবং এটি যে কোনো ইন্ডেক্স থেকে দ্রুত মান পড়তে বা পরিবর্তন করতে পারে।
Set
একটি অনন্য মানের সংগ্রহ, যেখানে প্রতিটি মান একবারই উপস্থিত থাকতে পারে। সেটের মাধ্যমে ডুপ্লিকেট মানগুলো সরিয়ে ফেলা যায় এবং এটি সাধারণত ডাটা মেম্বারশিপ যাচাইয়ের জন্য ব্যবহার করা হয়। ক্লোজারে সেট তৈরি করতে #{item1 item2 ...}
বা (set [item1 item2 ...])
ব্যবহার করা হয়।
(def my-set #{1 2 3 4 5})
; সেটে একটি মান আছে কিনা চেক করা
(contains? my-set 3) ; আউটপুট: true
; সেটে নতুন আইটেম যোগ করতে
(conj my-set 6) ; আউটপুট: #{1 2 3 4 5 6}
; সেট থেকে আইটেম বাদ দিতে
(disj my-set 2) ; আউটপুট: #{1 3 4 5}
সেট সাধারণত মানের ইউনিকনেস নিশ্চিত করতে এবং দ্রুত মেম্বারশিপ যাচাই করার জন্য ব্যবহৃত হয়।
Map
একটি কী-ভ্যালু পেয়ার ভিত্তিক ডেটা কাঠামো, যেখানে প্রতিটি কী-এর জন্য একটি নির্দিষ্ট মান সংরক্ষিত থাকে। ম্যাপ সাধারণত ডেটা অনুসন্ধান এবং অ্যাসোসিয়েটিভ ডেটা সংরক্ষণের জন্য ব্যবহৃত হয়। ক্লোজারে ম্যাপ তৈরি করতে {key1 value1, key2 value2, ...}
বা (hash-map key1 value1 key2 value2 ...)
ব্যবহার করা হয়।
(def my-map {:name "Alice" :age 30 :city "New York"})
; ম্যাপ থেকে মান পেতে
(:name my-map) ; আউটপুট: "Alice"
; বা get ব্যবহার করে
(get my-map :age) ; আউটপুট: 30
; নতুন কী-ভ্যালু পেয়ার যোগ করতে
(assoc my-map :country "USA") ; আউটপুট: {:name "Alice", :age 30, :city "New York", :country "USA"}
; একটি কী-ভ্যালু পেয়ার বাদ দিতে
(dissoc my-map :city) ; আউটপুট: {:name "Alice", :age 30}
ম্যাপ সাধারণত অ্যাসোসিয়েটিভ ডেটা মডেল এবং দ্রুত অনুসন্ধানের জন্য ব্যবহৃত হয়। এটি কী ভিত্তিক ডেটা অ্যাক্সেসের জন্য খুবই কার্যকর।
ডেটা কাঠামো | বৈশিষ্ট্য | ব্যবহারের উদ্দেশ্য |
---|---|---|
List | সংযুক্ত, অর্ডারড | ক্রমে ডেটা সংরক্ষণ, লিস্টে দ্রুত যুক্ত করা |
Vector | ইমিউটেবল, ইন্ডেক্সড | দ্রুত অ্যাক্সেস এবং সংশোধন |
Set | অনন্য মান | ডুপ্লিকেট সরানো এবং মেম্বারশিপ যাচাই |
Map | কী-ভ্যালু পেয়ার | অ্যাসোসিয়েটিভ ডেটা সংরক্ষণ এবং দ্রুত অনুসন্ধান |
এই ডেটা কাঠামোগুলো ক্লোজার প্রোগ্রামিংয়ে ডেটা সংগঠিতভাবে সংরক্ষণ, অ্যাক্সেস এবং ম্যানিপুলেশনে সহায়ক, এবং এগুলো বিভিন্ন পরিস্থিতিতে বিভিন্ন ধরনের ডেটা মডেল করতে উপযোগী।
common.read_more